iT邦幫忙

0

[LeetCode] 80. Remove Duplicates from Sorted Array II

  • 分享至 

  • xImage
  •  

Medium
Related Topics: Array / Two Pointers
LeetCode Source

解題想法

這題跟昨天類似,但可重複的數字從 1 個變成 2 個,且強調必須在 in-place 的規範下解題

我這裡先初始兩個變數

  • check: 計算數字出現次數
  • index: 紀錄 index 位置,換數字時和最後回傳我們需要用到它

由於題目初始條件 nums 長度最小是一,所以我們從 index = 1 開始判斷
當此時的數字與前一個數字相同時,check += 1
反之,check = 1,代表沒有出現相同數字,重制變數

最後面判斷式是重點,假設我們 check > 2,代表說有出現重複數字兩次以上
check <= 2 時,我們必須替換數字
index 的位置便是關鍵,index 初始下是在 1,僅在 check <= 2 時加一

我們可以發現,如果重複出現超過兩次,剩餘的數字便會忽略
而如果只出現一次或兩次,則會觸發判斷式,將重複出現的數字替換成只出現一到兩次的數字

Python

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:

        index = 1
        count = 1

        for i in range(1, len(nums)):
            if nums[i] == nums[i - 1]:
                count += 1
            else:
                count = 1  # Reset the count for the new element

            if count <= 2:
                nums[index] = nums[i]
                index += 1

        return index

C++

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int index = 1, check = 1;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] == nums[i-1]) {
                check += 1;
            } else {
                check = 1;
            }

            if (check <= 2) {
                nums[index] = nums[i];
                index += 1;
            }
        }
        return index;
    }
};

這系列文被記錄在 Top Interview 150 Series


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言